package cn.tedu.epidemic.webapi.repo;


import cn.tedu.community.commons.pojo.notice.vo.AdmNoticeListItemVO;
import cn.tedu.community.commons.pojo.notice.vo.AdmNoticeStandardVO;
import cn.tedu.community.commons.pojo.notice.vo.UserNoticeListItemVO;
import cn.tedu.community.commons.pojo.notice.vo.UserNoticeStandardVO;

import java.util.List;

/**
 * 处理公告缓存的数据访问接口
 */
public interface INoticeRedisRepository {
    /**
     * 管理员页面公告数据在缓存中key的前缀
     */
    String ADM_NOTICE_ITEM_KEY_PREFIX = "adm-notice:item:";

    /**
     * 用户页面公告数据在缓存中key的前缀
     */
    String USER_NOTICE_ITEM_KEY_PREFIX = "user-notice:item:";

    /**
     * 管理员页面公告列表数据在缓存中的key
     */
    String ADM_NOTICE_LIST_KEY = "adm-notice:list";

    /**
     * 用户页面公告列表数据在缓存中的key
     */
    String USER_NOTICE_LIST_KEY = "user-notice:list";

    /**
     * 公告数据的所有缓存数据的key的集合的key
     */
    String NOTICE_ALL_KEYS_KEY = "notice:all-keys";

    /**
     * 向缓存中存入单个管理员页面公告数据
     * @param admNoticeStandardVO 公告数据
     */
    void saveOne(AdmNoticeStandardVO admNoticeStandardVO);

    /**
     * 向缓存中存入单个用户页面公告数据
     * @param userNoticeStandardVO 公告数据
     */
    void save(UserNoticeStandardVO userNoticeStandardVO);

    /**
     * 向缓存中存入管理员页面公告列表数据
     * @param admNoticeListItemVO 管理员公告列表数据
     */
    void saveAdmNoticeList(List<AdmNoticeListItemVO> admNoticeListItemVO);

    /**
     * 向缓存中存入用户页面公告列表数据
     * @param userNoticeListItemVO 用户公告列表数据
     */
    void saveUserNoticeList(List<UserNoticeListItemVO> userNoticeListItemVO);

    /**
     * 删除缓存中所有公告数据
     */
    void deleteALl();

    /**
     * 从缓存中读取单个管理员页面公告数据
     * @param id 公告id
     * @return 匹配的公告数据，如果没有匹配的数据，则返回null
     */
    AdmNoticeStandardVO getOne(Long id);

    /**
     * 从缓存中读取单个用户页面公告数据
     * @param id 公告id
     * @return 匹配的公告数据，如果没有匹配的数据，则返回null
     */
    UserNoticeStandardVO get(Long id);

    /**
     * 从缓存中读取全部管理员页面的公告列表数据
     * @return 管理员页面公告列表数据
     */
    List<AdmNoticeListItemVO> admNoticeList();

    /**
     * 从缓存中读取管理员页面公告列表数据
     *
     * @param start 读取数据的起始下标，下标值从0开始顺序编号
     * @param end   读取数据的截止下标，如果需要读取至最后一条数据，请使用 -1
     * @return 管理员页面公告列表数据
     */
    List<AdmNoticeListItemVO> admNoticeList(long start, long end);

    /**
     * 从缓存中读取全部用户页面的公告列表数据
     * @return 用户页面公告列表数据
     */
    List<UserNoticeListItemVO> userNoticeList();

    /**
     * 从缓存中读取用户页面公告列表数据
     *
     * @param start 读取数据的起始下标，下标值从0开始顺序编号
     * @param end   读取数据的截止下标，如果需要读取至最后一条数据，请使用 -1
     * @return 用户页面公告列表数据
     */
    List<UserNoticeListItemVO> userNoticeList(long start, long end);

}
